package com.example.im.protocol;

import lombok.Data;

import java.util.List;

@Data
public class Message {
    // 消息唯一标识
    private String messageId;
    // 消息类型
    private Type type;
    // 发送者
    private String from;
    // 接收者
    private String to;
    // 消息内容
    private String content;
    // 时间戳
    private long timestamp;
    // 消息状态
    private Status status;
    // 是否需要确认
    private boolean needAck;
    // 确认消息ID（用于确认消息）
    private String ackMessageId;
    // 批量确认消息ID列表
    private List<String> batchAckMessageIds;
    // 用户列表（用于用户列表消息）
    private List<String> users;

    /**
     * 消息类型枚举
     * CHAT: 聊天消息
     * SERVER_ACK: 服务器确认
     * CLIENT_ACK: 客户端确认
     * DELIVERY_ACK: 送达确认
     * HEARTBEAT: 心跳消息
     * USER_LIST: 用户列表
     * LOGIN: 登录消息
     * LOGOUT: 登出消息
     */
    public enum Type {
        CHAT,
        SERVER_ACK,
        CLIENT_ACK,
        DELIVERY_ACK,
        HEARTBEAT,
        USER_LIST,
        LOGIN,
        LOGOUT
    }

    /**
     * 消息状态枚举
     * SENDING: 发送中
     * SENT: 已发送（服务器已收到）
     * DELIVERED: 已送达（接收方已收到）
     * FAILED: 发送失败
     */
    public enum Status {
        SENDING,
        SENT,
        DELIVERED,
        FAILED
    }
} 